'use strict';
var vk; // 全局vk实例
// 涉及的表名
// const dbName = {
// 	test: "vk-test", // 测试表
// };
const dbName = "jwc-bjgl";
var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function() {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function(options) {
		let { err, res } = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},
	/**
	 * 获取列表
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.getBjList 前端调用的url参数地址
	 */
	getBjList: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		res = await vk.baseDao.getTableData({
		  dbName,
		  data,
		  whereJson:{},
		  sortArr: [{ "name": "_add_time", "type": "desc" }],
		});
	
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.getxcxm 前端调用的url参数地址
	 */
	getxcxm: async function(data) {
		let res = { code: 0, msg: '' };
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 批量审核新媒体任务函数 
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.deletePlWxryWzLists 前端调用的url参数地址
	 */
	deletePlWxryWzLists: async function(data) {
		//let { uid } = this.getClientInfo(); // 获取客户端信息
		//let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息s
		// 业务逻辑开始-----------------------------------------------------------
		let res = { code: 0, msg: '' };
		let {_ids} = data;
		// 参数非空检测
		if (vk.pubfn.isNullOne(_ids)) {
			return { code: -1, msg: '参数错误' };
		}
		res.num = await vk.baseDao.del({
		  dbName:dbName,
		  whereJson:{
			_id:_.in(_ids)
		  }
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.deleteWxryWzListOne 前端调用的url参数地址
	 */
	deleteWxryWzListOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		let { _id } = data;
		if(vk.pubfn.isNull(_id)){
			return { code : -1, msg : 'id不能为空' };
		}
		res.num = await vk.baseDao.deleteById({
			dbName,
			id:_id
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.updateWxryWzListOne 前端调用的url参数地址
	 */
	updateWxryWzListOne: async function(data) {
		let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		//console.log("请求参数", data);
		let updateId = data._id
		Reflect.deleteProperty(data,'_id')
		// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
		//let register_date = new Date().getTime();
		res.newInfo = await vk.baseDao.updateById({
		  dbName:dbName,
		  id:updateId,
		  dataJson:{
		    ...data
		  }
		});
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.addWxryWzListOne 前端调用的url参数地址
	 */
	addWxryWzListOne: async function(data) {
		//let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		
		let info = await vk.baseDao.findByWhereJson({
		  dbName:dbName,
		  whereJson:{
			bjmc:data.bjmc
		  }
		});
		if(info){
			res = { code: -1, msg: '已存在的重复数据' };
			return res;
		}
		let userInfo = await this.getUserInfo();
		data.bjxszt = '1'
		data.bjpx = 1
		data.bjrsp = 0
		data.username = userInfo.username
		data.userid = userInfo._id
		data.userInfo ={};
		data.userInfo.uid = userInfo._id
		data.userInfo.username = userInfo.username
		data.userInfo.nickname = userInfo.nickname
		data.userInfo.role = userInfo.role
		data.userInfo.comment = userInfo.comment
		data.userInfo.last_login_ip = userInfo.last_login_ip
		if(data._id){
			let updateId = data._id
			Reflect.deleteProperty(data,'_id')
			// 此处应该还需要判断下mobile和username是否已存在等参数校验逻辑和
			//let register_date = new Date().getTime();
			res.newInfo = await vk.baseDao.updateById({
			  dbName:dbName,
			  id:updateId,
			  dataJson:{
			    ...data
			  }
			});
		}else{
			//console.log("请求参数", data);
			// bjpx:_.inc(1)
			res.id = await vk.baseDao.add({
			  dbName:dbName,// 表名
			  dataJson:{ // 需要新增的数据 json格式
				...data
			  }
			});
			
			// await db.collection('jwc-bjgl').doc(res.id).update({
			//   bjpx: _.inc(1)
			// })
			
		}

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/jwc-kqgl/jwc-bjgl-obj.getWxryWzListList 前端调用的url参数地址 
	 */
	getWxryWzListList: async function(data) {
		//let { uid, filterResponse, originalParam } = this.getClientInfo(); // 获取客户端信息
		let userInfo = await this.getUserInfo(); // 获取当前登录的用户信息
		let res = { code: 0, msg: '' };
		// 业务逻辑开始-----------------------------------------------------------
		const datainff = ['6544652fbd022034f4ef00a2','64646f6528064a758746aa09','654c7663466d4107c417baa4','655daa847ad52d2a064559cd']
		if (datainff.includes(userInfo._id)) {
		  //console.log("请求参数", data);
		  res = await vk.baseDao.getTableData({
		    dbName,
		    data,
			  fieldJson:{
			    _id: true,
				userInfo: true, 
			    bjxsrs: true, 
				bjrsp: true, 
				bjxz: true, 
				bjmc: true, 
				bjxy: true, 
				zy: true, 
				bz: true, 
				_add_time: true
			  },
			 //  foreignDB:[
				// {
				//   dbName:"jwc-bjjsgl-obj",
				//   localKey:"_id",
				//   foreignKey:"bjinfo._id",
				//   as:"bjjsrs",
				//   limit:500,
				//   fieldJson: {
				// 	  _id:true
				//   },
				// },
				// {
				//   dbName:"jwc-xsxxgl-obj",
				//   localKey:"_id",
				//   foreignKey:"bjinfo._id",
				//   as:"bjxsrs",
				//   limit:500,
				//   fieldJson: {
				// 	  _id:true
				//   },
				// }
			 //  ],
		  });
		} else {
		  //console.log("请求参数", data);
		  res = await vk.baseDao.getTableData({
		    dbName,
		    data,
			// foreignDB:[
			// 	{
			// 	  dbName:"jwc-bjjsgl-obj",
			// 	  localKey:"_id",
			// 	  foreignKey:"bjinfo._id",
			// 	  as:"bjjsrs",
			// 	  limit:500,
			// 	  fieldJson: {
			// 		  _id:true
			// 	  },
			// 	},
			// 	{
			// 	  dbName:"jwc-xsxxgl-obj",
			// 	  localKey:"_id",
			// 	  foreignKey:"bjinfo._id",
			// 	  as:"bjxsrs",
			// 	  limit:500,
			// 	  fieldJson: {
			// 		  _id:true
			// 	  },
			// 	}
			// ],
		  	whereJson:{ // 条件
		  	  userid:userInfo._id  // 金额大于0
		  	}
		  });
		}
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 获取列表
	 * @url admin/gsxy/demoobj.getList 前端调用的url参数地址
	 */
	getList: async function(data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------
		
	
		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/gsxy/demoobj.test 前端调用的url参数地址
	 */
	test: async function(data) {
		let res = { code: 0, msg: '' };
		let { uid } = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
};

module.exports = cloudObject;
